<?php
/**
 * Introduction: 支付宝支付操作
 * @date: 2016/4/7 23:00
 */

namespace Think\Alipay;

use Think\Alipay\App\Driver\AlipayNotify;
use Think\Alipay\App\Driver\AlipaySign;

class Alipay
{

    public $alipay_config,$notify,$sign;

    public function __construct()
    {

        $this->sign = new AlipaySign();

        $this->notify = new AlipayNotify();

        $this->alipay_config = $this->notify->alipay_config;

    }
    /**
     * Introduction: mui H5支付生成签名字符串()
     * @param array $data 支付参数 必须包含
     */
    public function signH5($out_trade_no,$subject,$total,$body)
    {

        if(is_array($out_trade_no)){

            $subject = $out_trade_no['subject'];
            $total = $out_trade_no['total'];
            $body = $out_trade_no['body'];
            $out_trade_no = $out_trade_no['out_trade_no'];

        }

        if(!$out_trade_no)
            return ['code' => 300, 'msg' => '缺少支付订单号!'];

        if(!$total)
            return ['code' => 300, 'msg' => '缺少支付金额!'];

        if(!$subject)
            return ['code' => 300, 'msg' => '缺少商品名称!'];

        if(!$body)
            return ['code' => 300, 'msg' => '缺少商品详情!'];


        $parameter = array(
            'service'        => '"'.$this->alipay_config['service'].'"',           // 必填，接口名称，固定值
            'partner'        => '"'.$this->alipay_config['partner'].'"',           // 必填，合作商户号
            '_input_charset' => '"'.$this->alipay_config['input_charset'].'"',     // 必填，参数编码字符集
            'out_trade_no'   => '"'.$out_trade_no.'"',                          // 必填，商户网站唯一订单号
            'subject'        => '"'.$subject.'"',                               // 必填，商品名称
            'payment_type'   => '"'.$this->alipay_config['payment_type'].'"',      // 必填，支付类型
            'seller_id'      => '"'.$this->alipay_config['seller_id'].'"',         // 必填，卖家支付宝账号
            'total_fee'      => '"'.$total.'"',                                 // 必填，总金额，取值范围为[0.01,100000000.00]
            'body'           => '"'.$body.'"',                                  // 必填，商品详情
            'it_b_pay'       => '"'.$this->alipay_config['it_b_pay'].'"',          // 可选，未付款交易的超时时间
            'notify_url'     => '"'.$this->alipay_config['notify_url'].'"',        // 可选，服务器异步通知页面路径
            //'show_url'       => $base_path                            // 可选，商品展示网站
        );
        //生成需要签名的订单
        $orderInfo = $this->sign->createLinkstring($parameter);


        //签名
        $sign = $this->sign->rsaSign($orderInfo);

        //生成订单
        return ['code' => 200,'data' => ['url' => $orderInfo.'&sign="'.urlencode($sign).'"&sign_type="RSA"']];

    }


    /**
     * Introduction: apicloud H5支付生成签名字符串()
     * @param array $data 支付参数 必须包含
     */
    public function asignH5($out_trade_no,$subject,$total,$body)
    {

        if(is_array($out_trade_no)){

            $subject = $out_trade_no['subject'];
            $total = $out_trade_no['total'];
            $body = $out_trade_no['body'];
            $out_trade_no = $out_trade_no['out_trade_no'];

        }

        if(!$out_trade_no)
            return ['code' => 300, 'msg' => '缺少支付订单号!'];

        if(!$total)
            return ['code' => 300, 'msg' => '缺少支付金额!'];

        if(!$subject)
            return ['code' => 300, 'msg' => '缺少商品名称!'];

        if(!$body)
            return ['code' => 300, 'msg' => '缺少商品详情!'];


        $parameter = array(
            'service'        => '"'.$this->alipay_config['service'].'"',           // 必填，接口名称，固定值
            'partner'        => '"'.$this->alipay_config['partner'].'"',           // 必填，合作商户号
            '_input_charset' => '"'.$this->alipay_config['input_charset'].'"',     // 必填，参数编码字符集
            'out_trade_no'   => '"'.$out_trade_no.'"',                          // 必填，商户网站唯一订单号
            'subject'        => '"'.$subject.'"',                               // 必填，商品名称
            'payment_type'   => '"'.$this->alipay_config['payment_type'].'"',      // 必填，支付类型
            'seller_id'      => '"'.$this->alipay_config['seller_id'].'"',         // 必填，卖家支付宝账号
            'total_fee'      => '"'.$total.'"',                                 // 必填，总金额，取值范围为[0.01,100000000.00]
            'body'           => '"'.$body.'"',                                  // 必填，商品详情
            'it_b_pay'       => '"'.$this->alipay_config['it_b_pay'].'"',          // 可选，未付款交易的超时时间
            'notify_url'     => '"'.$this->alipay_config['notify_url'].'"',        // 可选，服务器异步通知页面路径
            //'show_url'       => $base_path                            // 可选，商品展示网站
        );
        //生成需要签名的订单
        $orderInfo = $this->sign->createLinkstring($parameter);


        //签名
        $sign = $this->sign->rsaSign($orderInfo);

        //生成订单
        return ['code' => 200,'data' => ['url' => $orderInfo.'&sign="'.urlencode($sign).'"&sign_type="RSA"']];

    }
    /**
     * 针对notify_url验证消息是否是支付宝发出的合法消息
     * @param bool $is_log 是否储存日志
     * @param string $log_path 日志储存路径
     * @return 验证结果
     */
    public function verifyNotify($is_log = false, $log_path)
    {

        return $this->notify->verifyNotify($is_log, $log_path);

    }




}